#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
#include <string.h>

int main()
{
    int *p = malloc(4);
    if(p == NULL){   // 如果申请失败,输出错误原因
        printf("%s \n", strerror(errno)); // 报错 Not enough space， 10 替换成 INT_MAX，使用INT_MAX 需要引入limits.h
    }

    for (int i = 0; i < 10; i++)
    {
        printf("%d ", p[i]); // 输出乱数， 11671112 11665600 67108868 24290 11671112 11665600 1952671082 1836672092 1830839145 28005
    }
    
    for(int i=0;i<1;i++){
        p[i] = i;           //  这里是赋值
    }
    printf("\n");
    for (int i = 0; i < 1; i++)   // vscode没有受内存申请的大小影响
    {
        printf("%d ",p[i]); //  输出 0 
    }
    printf("\n");
    
    // 当发现的内存空间不够时,重新分配内存.使用realloc
    int *p2 = realloc(p,INT_MAX);
    if (p2 == NULL)
    {                                     // 如果申请失败,输出错误原因
        printf("ps = %s \n", strerror(errno)); // 报错 Not enough space， 10 替换成 INT_MAX，使用INT_MAX 需要引入limits.h
    }
    for (int i = 0; i < 100; i++) // vscode没有受内存申请的大小影响
    {
        printf("%d ", p2[i]); //  输出 0, 然后是乱数
    }

    // 当动态申请的空间不再使用的时候，就应该还给操作系统
    free(p); // free之后 p仍保留着原来的地址
    p = NULL; // 所以此处将p置为NULL
    return 0;
}